package dto;

import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 请求数据传输对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Request implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 请求类型
     */
    private RequestType type;
    
    /**
     * 键
     */
    private String key;
    
    /**
     * 值
     */
    private Object value;
    
    /**
     * 值类型
     */
    private String valueType;
    
    /**
     * 集合名称
     */
    private String collectionName;
    
    /**
     * 批量操作的键值对
     */
    private java.util.Map<String, Object> batchData;
    
    /**
     * 批量操作的键列表
     */
    private java.util.List<String> batchKeys;
    
    /**
     * 集合描述
     */
    private String collectionDescription;
    
    /**
     * 请求ID（用于追踪）
     */
    private String requestId;
    
    /**
     * 时间戳
     */
    private Long timestamp;
    
    /**
     * 标记是否为复制请求
     */
    private boolean isReplicated = false;
    
    public Request(RequestType type) {
        this.type = type;
        this.timestamp = System.currentTimeMillis();
        this.requestId = java.util.UUID.randomUUID().toString();
    }
    
    /**
     * 请求类型枚举
     */
    public enum RequestType {
        // 基本CRUD操作
        PUT,
        GET,
        UPDATE,
        DELETE,
        CONTAINS_KEY,
        GET_ALL_KEYS,
        GET_ALL_KEY_VALUES,
        
        // 批量操作
        BATCH_PUT,
        BATCH_UPDATE,
        BATCH_DELETE,
        
        // 集合操作
        CREATE_COLLECTION,
        DELETE_COLLECTION,
        GET_COLLECTION,
        GET_ALL_COLLECTIONS,
        PUT_IN_COLLECTION,
        GET_FROM_COLLECTION,
        DELETE_FROM_COLLECTION,
        GET_ALL_FROM_COLLECTION,
        
        // 系统操作
        CLEAR,
        GET_STATISTICS,
        PING
    }
} 